package top.lc951.myglide.request.transition;

import android.graphics.drawable.Drawable;
import android.support.annotation.Nullable;
import android.view.View;

/**
 * 一个允许过渡应用到{@link android.view.View}s。包装视图的目标将
 * 能够提供所有必要的参数并开始转换。那些没有的
 * 将无法提供必要的参数，因此将被迫忽略
 * 过渡。这个界面是一种妥协，它允许在Glide的视图中进行特定的转换
 * 任意资源类型和任意目标类型的复杂世界。
 * ＊
 *
 * @param <R>将被转换的资源类型。
 */

public interface Transition<R> {
    /**
     * 一个接口包装了一个视图，它公开了运行各种类型的视图所需的方法
     * android animations as transitions: ({@link ViewTransition}， {@link ViewPropertyTransition}和
     * 动画{@link android.graphics.drawable.Drawable}s)。
     */
    interface ViewAdapter {
        /**
         * Returns the wrapped {@link android.view.View}.
         */
        View getView();

        /**
         * Returns the current drawable being displayed in the view, or null if no such drawable exists
         * (or one cannot be retrieved).
         */
        @Nullable
        Drawable getCurrentDrawable();

        /**
         * Sets the current drawable (usually an animated drawable) to display in the wrapped view.
         *
         * @param drawable The drawable to display in the wrapped view.
         */
        void setDrawable(Drawable drawable);
    }

    /**
     *从以前的动画{@link android.graphics.drawable。Drawable}当前正在
     *在给定视图中显示，如果不为空，则显示到应该显示在
     *视图。
     *
     * @param current 将在视图中显示的新资源。
     * @param adapter 适配器{@link过渡。ViewAdapter}封装的视图至少可以返回
     * {@link android.view。View} from {@link Transition.ViewAdapter#getView()}。
     * @return True如果在运行转换的过程中，新资源被放到视图上，
     *如果调用者需要手动将当前资源放到视图中，则为false。
     */
    boolean transition(R current, ViewAdapter adapter);

}
